package verschiebespiel;

import java.io.IOException;
import java.util.UUID;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet implementation class verschiebespiel
 */
@WebServlet("/verschiebespiel")
public class verschiebespiel extends HttpServlet {
	private static final long serialVersionUID = 1L;
    
	// keine �ffentliche oder private Daten im Servlet unsynchronisiert verwenden. 
	//private logik spielelogik;
	
    /**
     * Default constructor. 
     */
    public verschiebespiel() 
    { 
    	// Instanziieren der Logik wird im SessionListener erledigt
    	System.out.println("aufruf des Konstruktors");
    }  

    // Einsprung ins Servlet durch den servlet-Container um Initialisierungen vorzunehmen
    public void init(ServletConfig config) throws ServletException 
    {   super.init(config);
        System.out.println("Aufruf von init");
   } 
	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String logikID;
		if(request.getParameter("logikID")==null){			//neue instanz
			logikID = UUID.randomUUID().toString();
		}else{
			logikID = request.getParameter("logikID");
		}
		System.out.println(logikID);
		
		Thread thread = Thread.currentThread();
		System.out.println("Thread-ID: "+thread.getId());
		System.out.println("Thread-Name: "+thread.getName());
		

		
		 // Session erzeugen oder benutzen
	    HttpSession session = request.getSession(true);
	    
	    // Session gibt es schon 
	    if ( session != null) 
	    {   logik spielelogik = (logik) session.getAttribute(logikID);
	        // aber logik noch nicht in der Session gespeichert
	        if ( spielelogik == null) 
	        { 
	        System.out.println("es wird eine neue Spielelogik erzeugt");
	    	spielelogik = new logik();
			session.setAttribute(logikID, spielelogik);
	        }
	    }
		
		
		// Wenn eine neue Session erzeugt wurde muss eine neue Spiellogik erzeugt werden 
	    // Daf�r ist der SessionListener zust�ndig
		/* 
		if ( session.isNew() )
		{   //spielelogik = new logik();
			//if ( spielelogik != null ) session.setAttribute("spielelogik", spielelogik);

    	} */

		
		String ziffer = request.getParameter("ziffer");
		if ( ziffer != null && !ziffer.equals(""))
		{
			logik spielelogik  = (logik) session.getAttribute(logikID);
			spielelogik.move(new Integer(ziffer));
			synchronized (spielelogik) {
				spielelogik.notifyAll();
			}
			boolean erg = spielelogik.richtigeReihenfolge();
			
			// Gewonnen erzwingen bei Auswahl der ziffer 3
			// if (ziffer.equals("3")) erg=true;
			
			if (erg)
			{ 
				// Umleiten auf Spiel gewonnen Seite
			  RequestDispatcher dispatcher = request.getRequestDispatcher("EndeSpiel.html");
			  dispatcher.forward(request, response);
			  // Session zerst�ren
			  //session.invalidate();				//aktuelle Lokig entfernen
			  session.removeAttribute(logikID);
			  return;
			}
			
		}
		RequestDispatcher dispatcher = request.getRequestDispatcher("verschiebespiel.jsp?logikID="+logikID);	
		dispatcher.forward(request, response);
		return;
		
	}
	

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
	{
		doGet(request, response);
	}

}
